<?php

namespace app\systems\logic;
use think\facade\Request;
use app\admin\model\AdminModel;
use app\systems\model\SystemMqGroupModel;
use think\Model;
use app\admin\logic\BasicLogic;
use app\systems\logic\MqGroupLogic;
use app\systems\logic\SystemMqLogic;
use think\facade\Validate;
use think\facade\Cache;
use think\facade\Db;
use think\facade\Config;

class MqTaskPushLogic extends BasicLogic
{

    ####队列处理数据类型
    const TYPE_COMMON_SYSTEM_IMPORT = 'common_system_import';   ##执行系统导入
    const TYPE_COMMON_SYSTEM_EXPORT = 'common_system_export';   ##执行系统导出
    const TYPE_REAL_ACCOUNT_CATEGORY_PAGE = 'real_account_category_page';   ##real分页拉取类目任务
    const TYPE_AMAZON_CATEGORY_PRODUCT_TYPE_BI = 'amazon_category_product_type_bi';   ##real分页拉取类目任务
    const TYPE_AMAZON_CATEGORY_PRODUCT_TYPE_TO_MAP = 'get_category_product_type_to_map';   ##拉取类目任务保存amazon库商品类目表分页
    const TYPE_AMAZON_CATEGORY_PRODUCT_TYPE_TO_MAP_SAVE = 'get_category_product_type_to_map_save';   ##拉取类目任务保存amazon库商品类目表保存
    const TYPE_AMAZON_ONLINE_LISTING_TORT = 'get_amamzon_online_listing_tort';   ##拉取类目任务保存amazon库商品类目表保存
    const TYPE_AMAZON_ONLINE_LISTING_TORT_SAVE = 'get_online_listing_tort_save';   ##拉取类目任务保存amazon库商品类目表保存
    const TYPE_PUBLISH_FAILED_ANALYSIS = 'publish_failed_analysis';  #刊登失败分析统计


    ####队列名称
    const QUEUE_SALE_CENTER_CRON_QUEUE = 'sale_center_cron_queue';  #公共基础队列
    const QUEUE_SALE_CENTER_LISTING_TORT_QUEUE = 'sale_center_listing_tort_queue';  #Listing侵权和敏感词检测拉取


    /**
     * mq推送队列主入口
     * @param string $mq_config
     * @param $mq_name
     * @param $mq_data
     * @param bool $check_type
     * @return string
     * @author xx
     * @Date 2024/3/12 17:13
     */
    public static function mq_task_push($mq_config, $mq_name, $mq_data, $check_type = true)
    {

        #type的作用，用以同一个队列处理不同场景的事务逻辑
        if ($check_type && empty($mq_data['type'])) return 'type为空';
        return MqGroupLogic::mq_send_message_by_queue($mq_config, $mq_name, $mq_data);
    }

    /**
     * 队列数据持久化设置
     * @param $mq_config
     * @param $mq_name
     * @param $mq_data
     * @param bool $check_type
     * @return string
     * @author xx
     * @Date 2024/3/12 17:13
     */
    public static function mq_task_push_delivery($mq_config, $mq_name, $mq_data, $check_type = true)
    {

        #type的作用，用以同一个队列处理不同场景的事务逻辑
        if ($check_type && empty($mq_data['type'])) return 'type为空';

        return MqGroupLogic::mq_send_message_by_queue($mq_config, $mq_name, $mq_data, ['delivery_mode' => 2]); #推送数据持久化
    }



    //队列：系统导入的队列

    /**
     * @Notes:导入推送到队列
     * @author xx
     * @Date 2024/3/12 17:13
     * @Time: 14:58
     * @param $mq_data
     * @return string
     */
    public static function common_system_import_task_push($mq_data)
    {

        if (empty($mq_data['type'])) return 'type为空';
        $queueName = self::get_system_import_task_bind_key($mq_data, 'sale_center_system_import_task');
        return MqGroupLogic::mq_send_message_by_queue('', $queueName, $mq_data);
    }


    static function get_system_import_task_bind_key($mq_data, $queueName)
    {
        // 公共导入
        if (!$mq_data['is_sub_library']) return $queueName;
        // 分平台导入
        return $queueName . '_xpt';
    }


    /**
     * @Notes:导出推送到队列
     * @author xx
     * @Date 2024/3/12 17:13
     * @Time: 14:58
     * @param $mq_data
     * @return string
     */
    public static function common_system_export_task_push($mq_data)
    {
        if (empty($mq_data['type'])) return 'type为空';
        #导出队列拆分 @2022-09-05
        $queue_name = self::get_system_export_task_bind_key($mq_data['platform_code'], 'sale_center_system_export_task');
        return MqGroupLogic::mq_send_message_by_queue('', $queue_name, $mq_data);
    }

    public static function get_system_export_task_bind_key($platform_code, $queue_name)
    {
        // 公共导出
        if (empty($platform_code) || $platform_code == 'demo') return $queue_name;

    }


    /**
     * @Notes:real消费平台拉取基础数据的队列
     * @author xx
     * @Date 2024/3/12 17:13
     * @Time: 17:20
     * @param $mq_data
     * @return string
     */
    public static function real_account_base_data_task_push($mq_data)
    {

        if (empty($mq_data['type'])) return 'type为空';
        return MqGroupLogic::mq_send_message_by_queue('', 'sale_center_real_account_base_data_task', $mq_data);
    }


    /**
     * @Notes:拉取类目列表 第一步 - 创建报告-推送队列
     * @author xx
     * @Date 2024/3/12 17:13
     * @Time: 9:31
     * @param $mq_data
     * @return string
     */
    public static function pull_category_create_report_to_queue($mq_data)
    {
        return MqGroupLogic::mq_send_message_by_queue('', 'pull_category_create_report_task_queue', $mq_data);
    }







}